package com.gitee.linmt.controller;

import com.gitee.linmt.entity.Result;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * ApplicationController.
 *
 * @author <a href="mailto:lin-mt@outlook.com">lin-mt</a>
 */
@RestController
@RequestMapping("/app")
public class ApplicationController {
    
    /**
     * 需要拥有 ROLE_大秃驴 权限才能访问的接口，此处设置权限时，如果是hasAnyRole，不需要以 ROLE_ 开头，在验证是否有权限的时候， 如果没有前缀，会自动加上前缀然后进行验证.
     *
     * @return Result
     */
    @GetMapping("/admin")
    @PreAuthorize("hasAnyRole('大秃驴')")
    public Result<Object> admin() {
        return Result.success().setMessage("This is 大秃驴 index.");
    }
    
    /**
     * 需要拥有 ROLE_小和尚 权限才能访问的接口.
     *
     * @return Result
     */
    @GetMapping("/user")
    @PreAuthorize("hasAnyRole('小和尚')")
    public Result<Object> user() {
        return Result.success().setMessage("This is 小和尚 index.");
    }
    
    /**
     * 需要拥有可访问的权限才能访问的接口.
     *
     * @return Result
     */
    @GetMapping("/location/{address}")
    @PreAuthorize("hasPermission(#address, 'location:read')")
    public Result<Object> location(@PathVariable("address") final String address) {
        return Result.success().setMessage("访问 %s 页面.").setMsgParam(address);
    }
    
}
